#include "cc_core.h"
#include "cc_msg.h"

#include <ctype.h>    // 用于isdigit函数

typedef void (*shell_cb)(char* param1, int node);
#define COMMAND_PARA_IS_GIVE(para) (strcmp((para), "no have") != 0)

typedef struct
{
  char command[CC_CONFIG_SHELL_COMMAND_NAME_MAX];
  char param[CC_CONFIG_SHELL_PARAM_MAX_LEN];
  uint8_t node;
} command_pack;

typedef struct
{
  char command[CC_CONFIG_SHELL_COMMAND_NAME_MAX];
  char info[CC_CONFIG_SHELL_INFO_MAX];
  shell_cb func;
} commands_main;
// 注册一个组件初始化函数
void cc_shell_command_register(shell_cb func, const char* name,
                               const char* info);

#define CC_COMMAND_SHELL_ALIAS(func, name, info)                         \
  static void __attribute__((constructor)) cc_shell_register##func(void) \
  {                                                                      \
    cc_shell_command_register(func, name, info);                         \
  }

#define CC_COMMAND_SHELL(func, info)                                     \
  static void __attribute__((constructor)) cc_shell_register##func(void) \
  {                                                                      \
    cc_shell_command_register(func, #func, info);                        \
  }

int cc_is_all_digits(const char* str);
void cc_shell_data_handle(cc_mnode_t data_node);
int cc_shell_parse_args(const char* req_args, const char* req_expr, ...);